package com.kpmg.datalake.common.service;

import com.baomidou.mybatisplus.plugins.Page;
import java.util.List;
import java.util.Map;

/**
 * 通用查询接口
 *
 * @author Alex.zhao [alex.zhao@kpmg.com]
 * @since Created on azhao6 on 2018-06-27 14:51:54
 */
public interface CommonExecuteService {
	
    /**
     * 通用查询接口
     *
     * @param databaseId 数据源ID
     * @param selectSql  查询sql
     * @return 查询结果
     */
    List<Map<String, Object>> queryListByString(String databaseId, String selectSql);


    /**
     * 通用分页查询接口
     *
     * @param databaseId 数据源ID
     * @param page 分页对象
     * @param selectSql 查询sql
     * @return 查询结果
     */
    Page<Map<String, Object>> queryPageByString(String databaseId, Page<Map<String, Object>> page,
        String selectSql);

    /**
     * 通用查询接口
     *
     * @param databaseId 数据源ID
     * @param selectSql  查询sql
     * @param params     查询参数，必须含有查询sql，查询sql的key为selectSql
     * @return 查询结果
     */
    List<Map<String, Object>> queryListByMap(String databaseId, String selectSql, Map<String, Object> params);

    /**
     *  通用分页查询接口
     * @param databaseId 数据源ID
     * @param page 分页对象
     * @param selectSql 查询sql
     * @param params 查询参数，必须含有查询sql，查询sql的key为selectSql
     * @return 查询结果
     */
    Page<Map<String, Object>> queryPageByMap(String databaseId, Page<Map<String, Object>> page,
        String selectSql, Map<String, Object> params);

    /**
     * 通过新增接口
     *
     * @param databaseId 数据源ID
     * @param insertSql  新增sql
     * @return 影响行数
     */
    Integer insertByString(String databaseId, String insertSql);

    /**
     * 通过新增接口
     *
     * @param databaseId 数据源ID
     * @param insertSql  新增sql
     * @param params     查询参数，必须含有更新sql，更新sql的key为insertSql
     * @return 影响行数
     */
    Integer insertByMap(String databaseId, String insertSql, Map<String, Object> params);

    /**
     * 通过更新接口
     *
     * @param databaseId 数据源ID
     * @param updateSql  跟新sql
     * @return 影响行数
     */
    Integer updateByString(String databaseId, String updateSql);

    /**
     * 通过更新接口
     *
     * @param databaseId 数据源ID
     * @param updateSql  跟新sql
     * @param params     查询参数，必须含有更新sql，更新sql的key为updateSql
     * @return 影响行数
     */
    Integer updateByMap(String databaseId, String updateSql, Map<String, Object> params);

    /**
     * 通用删除sql
     *
     * @param databaseId 数据源ID
     * @param deleteSql  删除sql
     * @return 影响行数
     */
    Integer deleteByString(String databaseId, String deleteSql);

    /**
     * 通用删除sql
     *
     * @param databaseId 数据源ID
     * @param deleteSql  删除sql
     * @param params     查询参数，必须含有删除sql，删除sql的key为deleteSql
     * @return 影响行数
     */
    Integer deleteByString(String databaseId, String deleteSql, Map<String, Object> params);
    /**
     * 执行存储过程
     *
     * @param callSql 参数
     */
    /**
     * 执行存储过程
     *
     * @param databaseId 数据源ID
     * @param callSql    存储过程对象
     * @return Map 返回结果集
     */
    Map<String, Object> callByString(String databaseId, String callSql);

}
